package cn.gdcp.lisetviewsqlite;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteTransactionListener;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;

import java.io.File;
import java.util.ArrayList;

public class MainActivity extends AppCompatActivity implements IOnDataChangeListener{
    private EditText edtKey;
    private ImageView ivSearch;
    private ListView lvstu;
    private Button btnAdd;
    private ArrayList<Student> studentArrayList = new ArrayList<>();
    private StuAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViews();

        //initStudentArrayList();

        adapter = new StuAdapter(MainActivity.this,studentArrayList,MainActivity.this);

        readDataFromDB();

        lvstu.setAdapter(adapter);
        lvstu.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int i, long l) {
                Student student = studentArrayList.get(i);
                Intent intent = new Intent();
                intent.setClass(MainActivity.this,EditActivity.class);
                intent.putExtra("STUNO",student.getStuno());
                intent.putExtra("NAME",student.getName());
                intent.putExtra("AGE",student.getAge());
                startActivityForResult(intent,1002);
            }
        });

    }

    // 从数据库读取学生列表
    private void readDataFromDB() {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path,null);

        String sql = "create table if not exists student(stuno varchar(20),name varchar(20),age int)";
        db.execSQL(sql);

        studentArrayList.clear();
       Cursor cursor = db.query("student",null,null,null,null,null,null,null);

        if (cursor != null && cursor.getCount() > 0){
            for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
                String stuno = cursor.getString(0);
                String name = cursor.getString(1);
                int age = cursor.getInt(2);

                Student student = new Student(stuno,name,age);
                studentArrayList.add(student);
            }
        }


        adapter.notifyDataSetChanged();

        cursor.close();
        db.close();

    }

    private void initStudentArrayList() {
        studentArrayList.add(new Student("17001","lis",18));
        studentArrayList.add(new Student("17002","lia",18));
        studentArrayList.add(new Student("17003","lsa",18));
        studentArrayList.add(new Student("17004","isa",18));
    }

    private void findViews() {
        lvstu = findViewById(R.id.lv_stu);
        btnAdd = findViewById(R.id.btn_add);

        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setClass(MainActivity.this,AddActivity.class);
                startActivityForResult(intent,1001);
            }
        });

        edtKey = findViewById(R.id.edt_key);
        ivSearch = findViewById(R.id.iv_search);
        ivSearch.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String key = edtKey.getText().toString();
                searchFromDB(key);
            }
        });
    }

    private void searchFromDB(String key) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path,null);

        String where = "name like '%" + key + "%' OR stuno like  '%" + key + "%'" + "OR age = " + key;
        studentArrayList.clear();
        Cursor cursor = db.query("student",null,where,null,null,null,null,null);

        if (cursor != null && cursor.getCount() > 0){
            for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
                String stuno = cursor.getString(0);
                String name = cursor.getString(1);
                int age = cursor.getInt(2);

                Student student = new Student(stuno,name,age);
                studentArrayList.add(student);
            }
        }


        adapter.notifyDataSetChanged();

        cursor.close();
        db.close();

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (resultCode == 2001){
            String stuno = data.getStringExtra("STUNO");
            String name = data.getStringExtra("NAME");
            int age = data.getIntExtra("AGE",0);

            Student student = new Student(stuno,name,age);
            addStudentToDB(student);
        }else if (resultCode == 3001){
            String stuno = data.getStringExtra("STUNO");
            String name = data.getStringExtra("NAME");
            int age = data.getIntExtra("AGE",0);

            Student student = new Student(stuno,name,age);
            updateStudentToDB(student);
        }
    }

    private void updateStudentToDB(Student student) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path,null);

        /** 第一种 组装语句
        String sql = "updat student set name = '"+student.getName()+"',"+
                " age = "+student.getAge()+"where stuno = '"+student.getStuno()+"'";
        db.execSQL(sql);
        db.close();
        readDataFromDB();*/

        //第二种 update
        ContentValues values = new ContentValues();
        values.put("name", student.getName());
        values.put("age",student.getAge());
        String where = "stuno = '"+student.getStuno()+"'";
        db.update("student",values,where,null);
        db.close();
        readDataFromDB();
    }

    private void addStudentToDB(Student student) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path,null);

        ContentValues values = new ContentValues();
        values.put("stuno",student.getStuno());
        values.put("name",student.getName());
        values.put("age",student.getAge());
        db.insert("student",null,values);
        db.close();
        readDataFromDB();
    }

    @Override
    public void del(Student student) {
        String path = getFilesDir().getAbsolutePath() + File.separator + "stu.db";
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(path,null);

        /*删除execSql()
        String sql = "delete from student where stuno ='"+student.getStuno()+"'";
        db.execSQL(sql);
        db.close();

        readDataFromDB();*/

        /*使用delete接口
        String where = "stuno = '" + student.getStuno() + "'";
        db.delete("student",where,null);
        db.close();
        readDataFromDB();*/

        /*使用delete接口*/
        String where = "stuno = ? ";
        String[] argArray = {student.getStuno()};
        db.delete("student",where,argArray);
        db.close();
        readDataFromDB();
    }
}
